3 if (!defined("_ECRIRE_INC_VERSION")) return;
6 * Action de création / Modification d'un menu
7 * @param unknown_type $arg
10 function action_editer_menu_dist($arg=null) {
13 $securiser_action = charger_fonction('securiser_action', 'inc');
14 $arg = $securiser_action();
17 // si id_menu n'est pas un nombre, c'est une creation
18 if (!$id_menu = intval($arg)) {
19 $id_menu = insert_menu();
22 // Enregistre l'envoi dans la BD
23 if ($id_menu > 0) $err = menu_set($id_menu);
25 // S'il y a un fichier on tente d'importer son contenu
26 if ($_FILES['import']){
27 $fichier = $_FILES['import']['tmp_name'];
29 lire_fichier($fichier, $yaml);
30 // Si on a bien recupere une chaine on tente de la decoder
32 include_spip('inc/yaml');
33 $entrees = yaml_decode($yaml);
34 // Si le decodage marche on importe alors le contenu
35 if (is_array($entrees)){
36 menus_importer($entrees, $id_menu);
41 if (_request('redirect')) {
42 $redirect = parametre_url(urldecode(_request('redirect')),
43 'id_menu', $id_menu, '&') . $err;
45 include_spip('inc/headers');
46 redirige_par_entete($redirect);
49 return array($id_menu,$err);
53 * Appelle la fonction de modification d'un menu
56 * @param unknown_type $set
59 function menu_set($id_menu, $set=null) {
68 $c[$champ] = _request($champ,$set);
70 include_spip('inc/modifier');
71 revision_menu($id_menu, $c);
77 * Crée un nouveau menu et retourne son ID
81 function insert_menu() {
82 $champs = array('titre'=>''); // eviter le bug de req/sqlite < 2.1.3
83 // Envoyer aux plugins
84 $champs = pipeline('pre_insertion',
87 'table' => 'spip_menus',
92 $id_menu = sql_insertq("spip_menus");
98 * Enregistre une révision de menu
100 * @param int $id_menu
104 function revision_menu ($id_menu, $c=false) {
105 $invalideur = "id='id_menu/$id_menu'";
107 modifier_contenu('menu', $id_menu,
109 'nonvide' => array('titre' => _T('info_sans_titre')),
110 'invalideur' => $invalideur
114 return ''; // pas d'erreur
117 function menus_importer($entrees, $id_menu){
118 // On lit chaque entree de premier niveau
119 foreach ($entrees as $cle => $entree){
120 // On ajoute cette entree
121 $id_menus_entree = sql_insertq(
122 'spip_menus_entrees',
124 'id_menu' => $id_menu,
125 'rang' => ($cle+
1), // les entrees sont dans l'ordre des rangs
126 'type_entree' => $entree['type_entree'],
127 'parametres' => serialize($entree['parametres'])
131 // S'il existe un sous-menu pour cette entree on le cree
132 if (is_array($entree['sous_menu'])){
133 $id_sous_menu = sql_insertq(
136 'id_menus_entree' => $id_menus_entree
139 // Puis dedans on importe les entrees correspondantes
140 menus_importer($entree['sous_menu'], $id_sous_menu);